<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/11/14
 * Time: 09:28 AM
 */
class PHZ_MoPai_Cancel
{

    /**
     * 本方法为执行用户取消了“公波”上的牌的吃，碰，胡的操作
     * @param $room_id         房间ID
     * @param $card_number     牌号
     * @param $mop_uid         该牌谁摸的
     * @param $cancel_uid      谁要取消？
     * @param $db_connect      数据库链接
     */
    public static function __cancel( $room_id , $card_number , $mop_uid , $cancel_uid ,  $db_connect ){
        //取出房间信息
        $room_info    = $db_connect->select('*')->from('tt_room')->where("room_id= '". $room_id ."' ")->row();
        //取消人的index
        $user_index   = PHZ_Tools::__get_user_in_room_index( $room_info , $cancel_uid );
        //如果操作的时候，操作人已经丢失了吃碰胡的状态，那么是不能继续往下执行的(吃碰胡全部为0的情况下；就不要再做任何操作了)
        if( $room_info['p' . $user_index . "_is_hu"] == 0 && $room_info['p' . $user_index . "_is_chi"] == 0 && $room_info['p' . $user_index . "_is_peng"] == 0 ){
            return false;
        }
        //添加一个pass过章子记录
        PHZ_Card::__set_UserPass_CHI_PENG_HU( $room_info , $cancel_uid , $card_number , $db_connect );
        //进行取消人的is_xxx操作(全部取消)
        $db_connect->update('tt_room')->cols( array( 'p' . $user_index . "_is_hu" => 0 , 'p' . $user_index . "_is_chi" => 0 , 'p' . $user_index . "_is_peng" => 0 ,  ) )->where( "room_id = '". $room_id ."'" )->query();
        //重新取出房间信息
        $room_info    = $db_connect->select('*')->from('tt_room')->where("room_id= '". $room_id ."' ")->row();
        //遍历房间信息，如果已经没有人存在操作标识了，则需要把这张牌给丢弃，且进行下一张的自动摸牌
        $all_user_is_operation = false;//默认没人可以操作了
        foreach ( $room_info as $key => $value ){
            if( strstr($key,'_is_') != false && $value == 1 ){
                $all_user_is_operation = true;break;//找到有人操作了
            }
        }
        //是否还需要等待其他人操作,如果还有人要操作，则直接返回，否则继续下家摸牌
        //修复1：需要给所有玩家下发有玩家取消操作的信息；这样可以方便其他玩家交接权利
        if( $all_user_is_operation == true ){
            $temp = array();
            $temp['pl']          = 21;//代表有玩家执行了取消操作，且还有人要执行接下来的操作
            $temp['card_number'] = $card_number;
            PHZ_Log::__send_user_log( $room_info , $cancel_uid , $temp , $db_connect );
            return false;
        }
        //设置当前房间摸牌人以及牌号 - 有人但是所有人都取消了的情况下；清空
        PHZ_Room::__setThisMopCard( $room_info['room_id'] , 0 , 0 , true , $db_connect );
        //所有人都不要操作这个牌后；给摸牌人增加一个BP
        PHZ_User::__user_add_bad_pai( $room_info , $mop_uid , $card_number , $db_connect );
        //给所有人发送取消信息(注意这里的log_uid是摸牌人的ID，不是当前取消的用户ID)
        $temp = array();
        $temp['pl']          = 20;//20代表摸牌后的吃碰胡的取消操作 - 且没有任何人能做任何操作了
        $temp['card_number'] = $card_number;//被取消操作的牌号
        $temp['put_uid']     = 0;$temp['mop_uid']      = 0;//取消操作，所有人丢失出牌权跟摸牌权
        PHZ_Log::__send_user_log( $room_info , $mop_uid , $temp , $db_connect );
        //设置出牌权
        PHZ_Room::__setThisPutUser( $room_info['room_id'] , $temp['put_uid'] , $db_connect );
        //继续下家摸牌操作(注意这里传入的mop_uid是指当前牌在谁那里摸出来的)
        PM_n::__index( $room_info , $mop_uid , 0 , $db_connect );
        return true;
    }
}
